package com.stone.boot.stoneboot.runner;

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.env.Environment;

/**
 * 定义一个应用程序启动类，实现CommandLineRunner接口，用于在命令行环境下启动服务器
 */
@Slf4j
public class MyApplicationRunner implements CommandLineRunner {

    /**
     * 环境变量对象，用于获取服务器配置信息
     */
    private final Environment env;

    /**
     * 构造函数，初始化环境变量对象
     *
     * @param env 环境变量对象
     */
    public MyApplicationRunner(Environment env) {
        this.env = env;
    }

    /**
     * 启动服务器的方法
     * 该方法用于在指定的端口和地址上启动服务器
     * 它从环境变量中读取服务器的配置信息，并打印启动信息
     *
     * @param args 命令行参数，此处未使用
     * @throws Exception 如果环境变量读取失败或其他异常发生，将抛出异常
     */
    @Override
    public void run(String... args) throws Exception {
        // 从环境变量中获取服务器端口配置
        String serverPort = env.getProperty("server.port");
        // 从环境变量中获取服务器地址配置
        String serverAddress = env.getProperty("server.address");

        // 打印服务器启动所使用的端口
        log.info("端口号: {}", serverPort);
        // 如果服务器地址不为空，则打印服务器所监听的IP地址
        if (serverAddress != null && !serverAddress.isEmpty()) {
            log.info("服务IP地址: {}", serverAddress);
        }
        System.out.println("服务启动成功，端口号为：" + serverPort);
    }
}

